import request from '@/utils/request'

/**
 * 获取字典类型列表
 * @param {Object} params 查询参数
 * @param {number} [params.page] 页码
 * @param {number} [params.limit] 每页条数
 * @param {string} [params.name] 字典名称
 * @param {string} [params.type] 字典类型
 * @param {number} [params.status] 状态（0停用 1正常）
 * @param {string} [params.beginTime] 创建开始日期
 * @param {string} [params.endTime] 创建结束日期
 * @returns {Promise} 请求结果
 */
export function getDictTypeList(params) {
  return request({
    url: '/system/dict/type/list',
    method: 'get',
    params
  })
}

/**
 * 获取字典类型详情
 * @param {number} id 字典类型ID
 * @returns {Promise} 请求结果
 */
export function getDictTypeDetail(id) {
  return request({
    url: `/system/dict/type/${id}`,
    method: 'get'
  })
}

/**
 * 添加字典类型
 * @param {Object} data 字典类型信息
 * @param {string} data.name 字典名称
 * @param {string} data.type 字典类型
 * @param {number} data.status 状态（0停用 1正常）
 * @param {string} [data.remark] 备注
 * @returns {Promise} 请求结果
 */
export function createDictType(data) {
  return request({
    url: '/system/dict/type',
    method: 'post',
    data
  })
}

/**
 * 修改字典类型
 * @param {number} id 字典类型ID
 * @param {Object} data 字典类型信息
 * @returns {Promise} 请求结果
 */
export function updateDictType(id, data) {
  return request({
    url: `/system/dict/type/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除字典类型
 * @param {number|Array} ids 字典类型ID或ID数组
 * @returns {Promise} 请求结果
 */
export function deleteDictType(ids) {
  return request({
    url: '/system/dict/type',
    method: 'delete',
    data: Array.isArray(ids) ? ids : [ids]
  })
}

/**
 * 获取字典数据列表
 * @param {Object} params 查询参数
 * @param {number} [params.page] 页码
 * @param {number} [params.limit] 每页条数
 * @param {string} params.dictType 字典类型
 * @param {string} [params.label] 字典标签
 * @param {number} [params.status] 状态（0停用 1正常）
 * @returns {Promise} 请求结果
 */
export function getDictDataList(params) {
  return request({
    url: '/system/dict/data/list',
    method: 'get',
    params
  })
}

/**
 * 根据字典类型获取字典数据
 * @param {string} dictType 字典类型
 * @returns {Promise} 请求结果
 */
export function getDictDataByType(dictType) {
  return request({
    url: `/system/dict/data/type/${dictType}`,
    method: 'get'
  })
}

/**
 * 获取字典数据详情
 * @param {number} id 字典数据ID
 * @returns {Promise} 请求结果
 */
export function getDictDataDetail(id) {
  return request({
    url: `/system/dict/data/${id}`,
    method: 'get'
  })
}

/**
 * 添加字典数据
 * @param {Object} data 字典数据信息
 * @param {string} data.dictType 字典类型
 * @param {string} data.label 字典标签
 * @param {string} data.value 字典键值
 * @param {number} [data.sort] 排序
 * @param {string} [data.listClass] 表格回显样式
 * @param {number} data.status 状态（0停用 1正常）
 * @param {string} [data.remark] 备注
 * @returns {Promise} 请求结果
 */
export function createDictData(data) {
  return request({
    url: '/system/dict/data',
    method: 'post',
    data
  })
}

/**
 * 修改字典数据
 * @param {number} id 字典数据ID
 * @param {Object} data 字典数据信息
 * @returns {Promise} 请求结果
 */
export function updateDictData(id, data) {
  return request({
    url: `/system/dict/data/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除字典数据
 * @param {number|Array} ids 字典数据ID或ID数组
 * @returns {Promise} 请求结果
 */
export function deleteDictData(ids) {
  return request({
    url: '/system/dict/data',
    method: 'delete',
    data: Array.isArray(ids) ? ids : [ids]
  })
}

/**
 * 导出字典类型
 * @param {Object} params 查询参数
 * @returns {Promise} 请求结果
 */
export function exportDictType(params) {
  return request({
    url: '/system/dict/type/export',
    method: 'get',
    params,
    responseType: 'blob'
  })
}

/**
 * 导出字典数据
 * @param {Object} params 查询参数
 * @returns {Promise} 请求结果
 */
export function exportDictData(params) {
  return request({
    url: '/system/dict/data/export',
    method: 'get',
    params,
    responseType: 'blob'
  })
}

/**
 * 刷新字典缓存
 * @param {string} [dictType] 字典类型，不传则刷新所有
 * @returns {Promise} 请求结果
 */
export function refreshDictCache(dictType) {
  return request({
    url: dictType ? `/system/dict/type/refreshCache/${dictType}` : '/system/dict/type/refreshCache',
    method: 'get'
  })
} 